{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Post-lapse Stability\n",
    "\n",
    "[![open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/open-spaced-repetition/fsrs4anki/blob/main/archive/research/post-lapse-stability.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here are some settings that you need to replace before running this optimizer.\n",
    "\n",
    "filename = \"../../collection-2022-09-18@13-21-58.colpkg\"\n",
    "# If you upload deck file, replace it with your deck filename. E.g., ALL__Learning.apkg\n",
    "# If you upload collection file, replace it with your colpgk filename. E.g., collection-2022-09-18@13-21-58.colpkg\n",
    "\n",
    "# Replace it with your timezone. I'm in China, so I use Asia/Shanghai.\n",
    "# You can find your timezone here: https://gist.github.com/heyalexej/8bf688fd67d7199be4a1682b3eec7568\n",
    "timezone = 'Asia/Shanghai'\n",
    "\n",
    "# Replace it with your Anki's setting in Preferences -> Scheduling.\n",
    "next_day_starts_at = 4\n",
    "\n",
    "# Replace it if you don't want the optimizer to use the review logs before a specific date.\n",
    "revlog_start_date = \"2006-10-05\"\n",
    "\n",
    "# Set it to True if you don't want the optimizer to use the review logs from suspended cards.\n",
    "filter_out_suspended_cards = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import zipfile\n",
    "import sqlite3\n",
    "import time\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import os\n",
    "from datetime import timedelta, datetime\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from itertools import accumulate\n",
    "from tqdm.auto import tqdm\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\", category=UserWarning)\n",
    "tqdm.pandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Deck file extracted successfully!\n",
      "revlog.csv saved.\n"
     ]
    }
   ],
   "source": [
    "\"\"\"Step 1\"\"\"\n",
    "# Extract the collection file or deck file to get the .anki21 database.\n",
    "with zipfile.ZipFile(f'{filename}', 'r') as zip_ref:\n",
    "    zip_ref.extractall('./')\n",
    "    print(\"Deck file extracted successfully!\")\n",
    "\n",
    "\"\"\"Step 2\"\"\"\n",
    "if os.path.isfile(\"collection.anki21b\"):\n",
    "    os.remove(\"collection.anki21b\")\n",
    "    raise Exception(\n",
    "        \"Please export the file with `support older Anki versions` if you use the latest version of Anki.\")\n",
    "elif os.path.isfile(\"collection.anki21\"):\n",
    "    con = sqlite3.connect(\"collection.anki21\")\n",
    "elif os.path.isfile(\"collection.anki2\"):\n",
    "    con = sqlite3.connect(\"collection.anki2\")\n",
    "else:\n",
    "    raise Exception(\"Collection not exist!\")\n",
    "cur = con.cursor()\n",
    "res = cur.execute(f\"\"\"\n",
    "SELECT *\n",
    "FROM revlog\n",
    "WHERE cid IN (\n",
    "    SELECT id\n",
    "    FROM cards\n",
    "    {\"WHERE queue != -1\" if filter_out_suspended_cards else \"\"}\n",
    ")\n",
    "\"\"\"\n",
    ")\n",
    "revlog = res.fetchall()\n",
    "if len(revlog) == 0:\n",
    "    raise Exception(\"No review log found!\")\n",
    "df = pd.DataFrame(revlog)\n",
    "df.columns = ['id', 'cid', 'usn', 'r', 'ivl', 'last_lvl', 'factor', 'time', 'type']\n",
    "df = df[(df['cid'] <= time.time() * 1000) &\n",
    "        (df['id'] <= time.time() * 1000)].copy()\n",
    "\n",
    "df_set_due_date = df[(df['type'] == 4) & (df['ivl'] > 0)]\n",
    "df.drop(df_set_due_date.index, inplace=True)\n",
    "\n",
    "df['create_date'] = pd.to_datetime(df['cid'] // 1000, unit='s')\n",
    "df['create_date'] = df['create_date'].dt.tz_localize('UTC').dt.tz_convert(timezone)\n",
    "df['review_date'] = pd.to_datetime(df['id'] // 1000, unit='s')\n",
    "df['review_date'] = df['review_date'].dt.tz_localize('UTC').dt.tz_convert(timezone)\n",
    "df.drop(df[df['review_date'].dt.year < 2006].index, inplace=True)\n",
    "df.sort_values(by=['cid', 'id'], inplace=True, ignore_index=True)\n",
    "\n",
    "df['is_learn_start'] = (df['type'] == 0) & (df['type'].shift() != 0)\n",
    "df['sequence_group'] = df['is_learn_start'].cumsum()\n",
    "last_learn_start = df[df['is_learn_start']].groupby('cid')['sequence_group'].last()\n",
    "df['last_learn_start'] = df['cid'].map(last_learn_start).fillna(0).astype(int)\n",
    "df['mask'] = df['last_learn_start'] <= df['sequence_group']\n",
    "df = df[df['mask'] == True].copy()\n",
    "df.drop(columns=['is_learn_start', 'sequence_group', 'last_learn_start', 'mask'], inplace=True)\n",
    "df = df[(df['type'] != 4)].copy()\n",
    "\n",
    "type_sequence = np.array(df['type'])\n",
    "time_sequence = np.array(df['time'])\n",
    "df.to_csv(\"revlog.csv\", index=False)\n",
    "print(\"revlog.csv saved.\")\n",
    "\n",
    "df = df[(df['type'] != 3) | (df['factor'] != 0)].copy()\n",
    "df['real_days'] = df['review_date'] - timedelta(hours=int(next_day_starts_at))\n",
    "df['real_days'] = pd.DatetimeIndex(df['real_days'].dt.floor('D', ambiguous='infer', nonexistent='shift_forward')).to_julian_date()\n",
    "df.drop_duplicates(['cid', 'real_days'], keep='first', inplace=True)\n",
    "df['delta_t'] = df.real_days.diff()\n",
    "df.dropna(inplace=True)\n",
    "df['i'] = df.groupby('cid').cumcount() + 1\n",
    "df.loc[df['i'] == 1, 'delta_t'] = 0\n",
    "df = df.groupby('cid').filter(lambda group: group['type'].iloc[0] == 0)\n",
    "df['prev_type'] = df.groupby('cid')['type'].shift(1).fillna(0).astype(int)\n",
    "df['helper'] = ((df['type'] == 0) & ((df['prev_type'] == 1) | (df['prev_type'] == 2)) & (df['i'] > 1)).astype(int)\n",
    "df['helper'] = df.groupby('cid')['helper'].cumsum()\n",
    "df = df[df['helper'] == 0]\n",
    "del df['prev_type']\n",
    "del df['helper']\n",
    "\n",
    "def cum_concat(x):\n",
    "    return list(accumulate(x))\n",
    "\n",
    "t_history = df.groupby('cid', group_keys=False)['delta_t'].apply(lambda x: cum_concat([[int(i)] for i in x]))\n",
    "df['t_history']=[','.join(map(str, item[:-1])) for sublist in t_history for item in sublist]\n",
    "r_history = df.groupby('cid', group_keys=False)['r'].apply(lambda x: cum_concat([[i] for i in x]))\n",
    "df['r_history']=[','.join(map(str, item[:-1])) for sublist in r_history for item in sublist]\n",
    "df = df.groupby('cid').filter(lambda group: group['id'].min() > time.mktime(datetime.strptime(revlog_start_date, \"%Y-%m-%d\").timetuple()) * 1000)\n",
    "df['y'] = df['r'].map(lambda x: {1: 0, 2: 1, 3: 1, 4: 1}[x])\n",
    "df.to_csv('revlog_history.tsv', sep=\"\\t\", index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>delta_t</th>\n",
       "      <th>i</th>\n",
       "      <th>t_history</th>\n",
       "      <th>r_history</th>\n",
       "      <th>retention</th>\n",
       "      <th>total_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>275</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.893817</td>\n",
       "      <td>1488</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5111</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.872222</td>\n",
       "      <td>360</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>218</th>\n",
       "      <td>3.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.790909</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>345</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>396</th>\n",
       "      <td>5.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.707317</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38515</th>\n",
       "      <td>43.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0,1,4,12</td>\n",
       "      <td>4,4,4,4</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7968</th>\n",
       "      <td>139.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0,4,12,38</td>\n",
       "      <td>4,4,4,4</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38516</th>\n",
       "      <td>122.0</td>\n",
       "      <td>6</td>\n",
       "      <td>0,1,4,12,43</td>\n",
       "      <td>4,4,4,4,3</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7969</th>\n",
       "      <td>410.0</td>\n",
       "      <td>6</td>\n",
       "      <td>0,4,12,38,139</td>\n",
       "      <td>4,4,4,4,3</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38517</th>\n",
       "      <td>377.0</td>\n",
       "      <td>7</td>\n",
       "      <td>0,1,4,12,43,122</td>\n",
       "      <td>4,4,4,4,3,3</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>56883 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       delta_t  i        t_history    r_history  retention  total_cnt\n",
       "275        1.0  2                0            1   0.893817       1488\n",
       "5111       2.0  2                0            1   0.872222        360\n",
       "218        3.0  2                0            1   0.790909        110\n",
       "345        4.0  2                0            1   0.800000         50\n",
       "396        5.0  2                0            1   0.707317         41\n",
       "...        ... ..              ...          ...        ...        ...\n",
       "38515     43.0  5         0,1,4,12      4,4,4,4   1.000000          1\n",
       "7968     139.0  5        0,4,12,38      4,4,4,4   1.000000          1\n",
       "38516    122.0  6      0,1,4,12,43    4,4,4,4,3   1.000000          1\n",
       "7969     410.0  6    0,4,12,38,139    4,4,4,4,3   1.000000          1\n",
       "38517    377.0  7  0,1,4,12,43,122  4,4,4,4,3,3   1.000000          1\n",
       "\n",
       "[56883 rows x 6 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy.optimize import curve_fit\n",
    "\n",
    "df_analysis = df[(df['i'] > 1) & (df['delta_t'] > 0) & (df['t_history'].str.count(',0') == 0)].copy()\n",
    "\n",
    "\n",
    "df_analysis['retention'] = df_analysis.groupby(by=['r_history', 't_history', 'delta_t'], group_keys=False)['y'].transform('mean')\n",
    "df_analysis['total_cnt'] = df_analysis.groupby(by=['r_history', 't_history', 'delta_t'], group_keys=False)['id'].transform('count')\n",
    "df_analysis.drop(columns=['id', 'cid', 'usn', 'r', 'ivl', 'last_lvl', 'factor', 'time', 'type', 'create_date', 'review_date', 'real_days', 'y'], inplace=True)\n",
    "df_analysis.drop_duplicates(inplace=True)\n",
    "df_analysis.sort_values(by=['r_history', 't_history', 'delta_t'], inplace=True)\n",
    "df_analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def exp_curve(delta_t, S):\n",
    "    return 0.9 ** (delta_t / S)\n",
    "\n",
    "def reverse_exp_curve(delta_t, R):\n",
    "    return np.log(0.9) / np.log(R) * delta_t\n",
    "\n",
    "def pow_curve(delta_t, S):\n",
    "    return (1 + delta_t / (9 * S)) ** -1\n",
    "\n",
    "def reverse_pow_curve(delta_t, R):\n",
    "    return delta_t / 9 / (1 / R - 1)\n",
    "\n",
    "def fit_stability(delta_t, recall, cnt, curve_func, reverse_curve_func):\n",
    "    try:\n",
    "        params, _ = curve_fit(curve_func, delta_t, recall, sigma=1/cnt, bounds=((0.1), (3650)))\n",
    "        return params[0]\n",
    "    except Exception as e:\n",
    "        print(e)\n",
    "        return reverse_curve_func(delta_t.values, recall.values)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "db651368e2a74f008a15e695bae9a59e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/50077 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_pow_stability = df_analysis.groupby(by=['r_history', 't_history']).progress_apply(lambda group: fit_stability(group['delta_t'], group['retention'], group['total_cnt'], pow_curve, reverse_pow_curve)).reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test = pd.merge(df_analysis, df_pow_stability, on=['r_history', 't_history'], how='left').rename(columns={0: 'pow_stability'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test['t_plus_delta_t'] = df_test['t_history'] + df_test['delta_t'].map(lambda x: \",\" + str(int(x)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test['r_plus_1'] = df_test['r_history'] + \",1\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = pd.merge(df_test, df_test, left_on=['t_history', 'r_history'], right_on=['t_plus_delta_t', 'r_plus_1'], suffixes=('_left', '_right'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "result.drop(columns=['t_plus_delta_t_left', 't_plus_delta_t_right', 'r_plus_1_left', 'r_plus_1_right'], inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "result.drop_duplicates(subset=['t_history_left', 'r_history_left'], inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>delta_t_left</th>\n",
       "      <th>i_left</th>\n",
       "      <th>t_history_left</th>\n",
       "      <th>r_history_left</th>\n",
       "      <th>retention_left</th>\n",
       "      <th>total_cnt_left</th>\n",
       "      <th>pow_stability_left</th>\n",
       "      <th>delta_t_right</th>\n",
       "      <th>i_right</th>\n",
       "      <th>t_history_right</th>\n",
       "      <th>r_history_right</th>\n",
       "      <th>retention_right</th>\n",
       "      <th>total_cnt_right</th>\n",
       "      <th>pow_stability_right</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.868421</td>\n",
       "      <td>114</td>\n",
       "      <td>0.796240</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.893817</td>\n",
       "      <td>1488</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,2</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>21</td>\n",
       "      <td>0.757530</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.872222</td>\n",
       "      <td>360</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,24</td>\n",
       "      <td>1,1</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>1825.050000</td>\n",
       "      <td>24.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,3</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.818182</td>\n",
       "      <td>22</td>\n",
       "      <td>0.503067</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.790909</td>\n",
       "      <td>110</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,4</td>\n",
       "      <td>1,1</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>9</td>\n",
       "      <td>3421.910660</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>50</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7930</th>\n",
       "      <td>1.0</td>\n",
       "      <td>7</td>\n",
       "      <td>0,1,4,14,36,96</td>\n",
       "      <td>4,4,4,3,3,1</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>1825.050000</td>\n",
       "      <td>96.0</td>\n",
       "      <td>6</td>\n",
       "      <td>0,1,4,14,36</td>\n",
       "      <td>4,4,4,3,3</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.100007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7931</th>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>0,1,4,14,36,96,1,3,8,23</td>\n",
       "      <td>4,4,4,3,3,1,3,3,3,1</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>1825.050000</td>\n",
       "      <td>23.0</td>\n",
       "      <td>10</td>\n",
       "      <td>0,1,4,14,36,96,1,3,8</td>\n",
       "      <td>4,4,4,3,3,1,3,3,3</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7932</th>\n",
       "      <td>1.0</td>\n",
       "      <td>8</td>\n",
       "      <td>0,1,4,13,35,98,281</td>\n",
       "      <td>4,4,4,3,3,3,1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>281.0</td>\n",
       "      <td>7</td>\n",
       "      <td>0,1,4,13,35,98</td>\n",
       "      <td>4,4,4,3,3,3</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7933</th>\n",
       "      <td>2.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0,1,4,13,35,98,281,1</td>\n",
       "      <td>4,4,4,3,3,3,1,1</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>2737.624412</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8</td>\n",
       "      <td>0,1,4,13,35,98,281</td>\n",
       "      <td>4,4,4,3,3,3,1</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7934</th>\n",
       "      <td>1.0</td>\n",
       "      <td>12</td>\n",
       "      <td>0,1,4,13,35,98,281,1,2,4,15</td>\n",
       "      <td>4,4,4,3,3,3,1,1,3,4,1</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>1825.050000</td>\n",
       "      <td>15.0</td>\n",
       "      <td>11</td>\n",
       "      <td>0,1,4,13,35,98,281,1,2,4</td>\n",
       "      <td>4,4,4,3,3,3,1,1,3,4</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>7789 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      delta_t_left  i_left               t_history_left  \\\n",
       "0              1.0       3                          0,1   \n",
       "5              1.0       3                          0,2   \n",
       "8              1.0       3                         0,24   \n",
       "9              1.0       3                          0,3   \n",
       "11             1.0       3                          0,4   \n",
       "...            ...     ...                          ...   \n",
       "7930           1.0       7               0,1,4,14,36,96   \n",
       "7931           1.0      11      0,1,4,14,36,96,1,3,8,23   \n",
       "7932           1.0       8           0,1,4,13,35,98,281   \n",
       "7933           2.0       9         0,1,4,13,35,98,281,1   \n",
       "7934           1.0      12  0,1,4,13,35,98,281,1,2,4,15   \n",
       "\n",
       "             r_history_left  retention_left  total_cnt_left  \\\n",
       "0                       1,1        0.868421             114   \n",
       "5                       1,1        0.952381              21   \n",
       "8                       1,1        1.000000               1   \n",
       "9                       1,1        0.818182              22   \n",
       "11                      1,1        1.000000               9   \n",
       "...                     ...             ...             ...   \n",
       "7930            4,4,4,3,3,1        1.000000               1   \n",
       "7931    4,4,4,3,3,1,3,3,3,1        1.000000               1   \n",
       "7932          4,4,4,3,3,3,1        0.000000               1   \n",
       "7933        4,4,4,3,3,3,1,1        1.000000               1   \n",
       "7934  4,4,4,3,3,3,1,1,3,4,1        1.000000               1   \n",
       "\n",
       "      pow_stability_left  delta_t_right  i_right           t_history_right  \\\n",
       "0               0.796240            1.0        2                         0   \n",
       "5               0.757530            2.0        2                         0   \n",
       "8            1825.050000           24.0        2                         0   \n",
       "9               0.503067            3.0        2                         0   \n",
       "11           3421.910660            4.0        2                         0   \n",
       "...                  ...            ...      ...                       ...   \n",
       "7930         1825.050000           96.0        6               0,1,4,14,36   \n",
       "7931         1825.050000           23.0       10      0,1,4,14,36,96,1,3,8   \n",
       "7932            0.100000          281.0        7            0,1,4,13,35,98   \n",
       "7933         2737.624412            1.0        8        0,1,4,13,35,98,281   \n",
       "7934         1825.050000           15.0       11  0,1,4,13,35,98,281,1,2,4   \n",
       "\n",
       "          r_history_right  retention_right  total_cnt_right  \\\n",
       "0                       1         0.893817             1488   \n",
       "5                       1         0.872222              360   \n",
       "8                       1         0.000000                1   \n",
       "9                       1         0.790909              110   \n",
       "11                      1         0.800000               50   \n",
       "...                   ...              ...              ...   \n",
       "7930            4,4,4,3,3         0.000000                1   \n",
       "7931    4,4,4,3,3,1,3,3,3         0.000000                1   \n",
       "7932          4,4,4,3,3,3         0.000000                1   \n",
       "7933        4,4,4,3,3,3,1         0.000000                1   \n",
       "7934  4,4,4,3,3,3,1,1,3,4         0.000000                1   \n",
       "\n",
       "      pow_stability_right  \n",
       "0                0.999465  \n",
       "5                0.999465  \n",
       "8                0.999465  \n",
       "9                0.999465  \n",
       "11               0.999465  \n",
       "...                   ...  \n",
       "7930             0.100007  \n",
       "7931             0.100000  \n",
       "7932             0.100000  \n",
       "7933             0.100000  \n",
       "7934             0.100000  \n",
       "\n",
       "[7789 rows x 14 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>delta_t_left</th>\n",
       "      <th>i_left</th>\n",
       "      <th>t_history_left</th>\n",
       "      <th>r_history_left</th>\n",
       "      <th>retention_left</th>\n",
       "      <th>total_cnt_left</th>\n",
       "      <th>pow_stability_left</th>\n",
       "      <th>delta_t_right</th>\n",
       "      <th>i_right</th>\n",
       "      <th>t_history_right</th>\n",
       "      <th>r_history_right</th>\n",
       "      <th>retention_right</th>\n",
       "      <th>total_cnt_right</th>\n",
       "      <th>pow_stability_right</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.868421</td>\n",
       "      <td>114</td>\n",
       "      <td>0.796240</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.893817</td>\n",
       "      <td>1488</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,2</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>21</td>\n",
       "      <td>0.757530</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.872222</td>\n",
       "      <td>360</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,3</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.818182</td>\n",
       "      <td>22</td>\n",
       "      <td>0.503067</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.790909</td>\n",
       "      <td>110</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,5</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.888889</td>\n",
       "      <td>9</td>\n",
       "      <td>0.852939</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.707317</td>\n",
       "      <td>41</td>\n",
       "      <td>0.999465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,1</td>\n",
       "      <td>1,1,1</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>12</td>\n",
       "      <td>0.342164</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>1,1</td>\n",
       "      <td>0.868421</td>\n",
       "      <td>114</td>\n",
       "      <td>0.796240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>231</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0,1,1,3</td>\n",
       "      <td>1,1,3,1</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>11</td>\n",
       "      <td>1.111111</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,1</td>\n",
       "      <td>1,1,3</td>\n",
       "      <td>0.835821</td>\n",
       "      <td>67</td>\n",
       "      <td>1.686538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>898</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,1</td>\n",
       "      <td>1,3,1</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>6</td>\n",
       "      <td>0.461739</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>1,3</td>\n",
       "      <td>0.896104</td>\n",
       "      <td>77</td>\n",
       "      <td>4.151884</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>903</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,3</td>\n",
       "      <td>1,3,1</td>\n",
       "      <td>0.883721</td>\n",
       "      <td>43</td>\n",
       "      <td>0.880955</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>1,3</td>\n",
       "      <td>0.926407</td>\n",
       "      <td>693</td>\n",
       "      <td>4.151884</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>905</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,4</td>\n",
       "      <td>1,3,1</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>11</td>\n",
       "      <td>1.717149</td>\n",
       "      <td>4.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>1,3</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>138</td>\n",
       "      <td>4.151884</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>916</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,2,3</td>\n",
       "      <td>1,3,1</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>7</td>\n",
       "      <td>1.069518</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,2</td>\n",
       "      <td>1,3</td>\n",
       "      <td>0.911392</td>\n",
       "      <td>158</td>\n",
       "      <td>3.357472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3517</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>2,1</td>\n",
       "      <td>0.875000</td>\n",
       "      <td>16</td>\n",
       "      <td>0.739500</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.901042</td>\n",
       "      <td>192</td>\n",
       "      <td>1.076692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3931</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>3,1</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>50</td>\n",
       "      <td>1.219088</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.977836</td>\n",
       "      <td>3429</td>\n",
       "      <td>5.151128</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4319</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,1</td>\n",
       "      <td>3,3,1</td>\n",
       "      <td>0.818182</td>\n",
       "      <td>11</td>\n",
       "      <td>0.472963</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>3,3</td>\n",
       "      <td>0.951852</td>\n",
       "      <td>270</td>\n",
       "      <td>11.163608</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4322</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,3</td>\n",
       "      <td>3,3,1</td>\n",
       "      <td>0.913043</td>\n",
       "      <td>46</td>\n",
       "      <td>1.148841</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>3,3</td>\n",
       "      <td>0.964925</td>\n",
       "      <td>1397</td>\n",
       "      <td>11.163608</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7038</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>4,1</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>15</td>\n",
       "      <td>0.776065</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>0.979852</td>\n",
       "      <td>943</td>\n",
       "      <td>10.954119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7043</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,3</td>\n",
       "      <td>4,1</td>\n",
       "      <td>0.875000</td>\n",
       "      <td>8</td>\n",
       "      <td>1.600495</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>0.972516</td>\n",
       "      <td>473</td>\n",
       "      <td>10.954119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7046</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,4</td>\n",
       "      <td>4,1</td>\n",
       "      <td>0.941176</td>\n",
       "      <td>17</td>\n",
       "      <td>1.479463</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>0.955056</td>\n",
       "      <td>445</td>\n",
       "      <td>10.954119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7158</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0,1,3</td>\n",
       "      <td>4,3,1</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>11</td>\n",
       "      <td>1.142428</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0,1</td>\n",
       "      <td>4,3</td>\n",
       "      <td>0.981763</td>\n",
       "      <td>658</td>\n",
       "      <td>18.065097</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      delta_t_left  i_left t_history_left r_history_left  retention_left  \\\n",
       "0              1.0       3            0,1            1,1        0.868421   \n",
       "5              1.0       3            0,2            1,1        0.952381   \n",
       "9              1.0       3            0,3            1,1        0.818182   \n",
       "13             1.0       3            0,5            1,1        0.888889   \n",
       "18             1.0       4          0,1,1          1,1,1        0.750000   \n",
       "231            1.0       5        0,1,1,3        1,1,3,1        0.909091   \n",
       "898            1.0       4          0,1,1          1,3,1        0.833333   \n",
       "903            1.0       4          0,1,3          1,3,1        0.883721   \n",
       "905            1.0       4          0,1,4          1,3,1        0.909091   \n",
       "916            1.0       4          0,2,3          1,3,1        0.857143   \n",
       "3517           1.0       3            0,1            2,1        0.875000   \n",
       "3931           1.0       3            0,1            3,1        0.900000   \n",
       "4319           1.0       4          0,1,1          3,3,1        0.818182   \n",
       "4322           1.0       4          0,1,3          3,3,1        0.913043   \n",
       "7038           1.0       3            0,1            4,1        0.866667   \n",
       "7043           1.0       3            0,3            4,1        0.875000   \n",
       "7046           1.0       3            0,4            4,1        0.941176   \n",
       "7158           1.0       4          0,1,3          4,3,1        0.909091   \n",
       "\n",
       "      total_cnt_left  pow_stability_left  delta_t_right  i_right  \\\n",
       "0                114            0.796240            1.0        2   \n",
       "5                 21            0.757530            2.0        2   \n",
       "9                 22            0.503067            3.0        2   \n",
       "13                 9            0.852939            5.0        2   \n",
       "18                12            0.342164            1.0        3   \n",
       "231               11            1.111111            3.0        4   \n",
       "898                6            0.461739            1.0        3   \n",
       "903               43            0.880955            3.0        3   \n",
       "905               11            1.717149            4.0        3   \n",
       "916                7            1.069518            3.0        3   \n",
       "3517              16            0.739500            1.0        2   \n",
       "3931              50            1.219088            1.0        2   \n",
       "4319              11            0.472963            1.0        3   \n",
       "4322              46            1.148841            3.0        3   \n",
       "7038              15            0.776065            1.0        2   \n",
       "7043               8            1.600495            3.0        2   \n",
       "7046              17            1.479463            4.0        2   \n",
       "7158              11            1.142428            3.0        3   \n",
       "\n",
       "     t_history_right r_history_right  retention_right  total_cnt_right  \\\n",
       "0                  0               1         0.893817             1488   \n",
       "5                  0               1         0.872222              360   \n",
       "9                  0               1         0.790909              110   \n",
       "13                 0               1         0.707317               41   \n",
       "18               0,1             1,1         0.868421              114   \n",
       "231            0,1,1           1,1,3         0.835821               67   \n",
       "898              0,1             1,3         0.896104               77   \n",
       "903              0,1             1,3         0.926407              693   \n",
       "905              0,1             1,3         0.884058              138   \n",
       "916              0,2             1,3         0.911392              158   \n",
       "3517               0               2         0.901042              192   \n",
       "3931               0               3         0.977836             3429   \n",
       "4319             0,1             3,3         0.951852              270   \n",
       "4322             0,1             3,3         0.964925             1397   \n",
       "7038               0               4         0.979852              943   \n",
       "7043               0               4         0.972516              473   \n",
       "7046               0               4         0.955056              445   \n",
       "7158             0,1             4,3         0.981763              658   \n",
       "\n",
       "      pow_stability_right  \n",
       "0                0.999465  \n",
       "5                0.999465  \n",
       "9                0.999465  \n",
       "13               0.999465  \n",
       "18               0.796240  \n",
       "231              1.686538  \n",
       "898              4.151884  \n",
       "903              4.151884  \n",
       "905              4.151884  \n",
       "916              3.357472  \n",
       "3517             1.076692  \n",
       "3931             5.151128  \n",
       "4319            11.163608  \n",
       "4322            11.163608  \n",
       "7038            10.954119  \n",
       "7043            10.954119  \n",
       "7046            10.954119  \n",
       "7158            18.065097  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result[(result['total_cnt_left'] > 5) & (result['retention_left'] < 1)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='pow_stability_right', ylabel='pow_stability_left'>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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aCspKVFoaKjat2/f6HZBQUEKCgpqsboAAACA1sSlEJCUlKSNGzeqf//+mjBhgu677z599NFH2rhxo66//np312iXmJioDRs2OLRt3LhRiYmJLfaZAAAAQFvjUgh4+umndfLkSUnS/PnzFRAQoE8++US//vWv9dBDDzm9n6qqKuXm5trf5+fnKzs7W126dFGvXr00b948HT58WOnp6ZKku+++W08//bT+67/+S9OmTdNHH32kN954Q+vXr3flawAAAACWZJimaXrrwzMzMzVy5Mhz2qdMmaI1a9Zo6tSpKigoUGZmpsM2c+bM0VdffaWLL75YDz/8cLMnC6usrFRYWJgqKioUGhp6gd8CAAAA8L7mXOO6FAL8/f1VVFSkyMhIh/by8nJFRkbKZrM1d5ceRQgAAABAW9Oca1yXng7UWG6ora1VYGCgK7sEAAAA4CHNGhOwbNkySZJhGHrxxRfVsWNH+zKbzaasrCxddtll7q0QAAAAgFs1KwQsXbpU0o93AlauXCl/f3/7ssDAQMXGxmrlypXurRAAAACAWzUrBOTn50uSRo4cqbVr16pz584tUhQAAACAluPSmIAtW7Y4BACbzabs7Gz98MMPbisMAAAAQMtwKQTcf//9WrVqlaQfA0BSUpKuuuoqRUdHOzzOEwAAAIDvcSkEvPnmmxo4cKAk6Z///KcKCgr09ddfa86cOZo/f75bCwQAAADgXi6FgPLycnXr1k2StGHDBk2YMEGXXnqppk2bpr1797q1QAAAAADu5VIIiIqK0ldffSWbzab3339fN9xwgySppqbG4YlBAAAAAHxPs54OdMYdd9yhiRMnqnv37jIMQykpKZKkHTt2ME8AAAAA4ONcCgGPPvqo+vXrp0OHDmnChAkKCgqSJPn7+2vu3LluLRAAAACAexmmaZottfP+/ftrw4YNio6ObqmPcEllZaXCwsJUUVGh0NBQb5cDAAAAXLDmXOO6NCbAWQUFBTp16lRLfgQAAACAZmrREAAAAADA9xACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFiMSyHg5MmTTq333HPPKSoqypWPAAAAANBCXJosrFOnTho6dKiuvfZaJScna/jw4Wrfvv05602aNOmCCwQAAADgXi7dCdi0aZNuvPFG7dixQ+PGjVPnzp11zTXXaP78+dq4caO7awQAAADgRhc8Y/Dp06f12Wef6bnnntOrr76q+vp62Ww2d9XXIpgxGAAAAG1Nc65xXeoOJEnffPONMjMz7a/a2lrdfPPNSk5OdnWXAAAAADzApRDQs2dPnThxQsnJyUpOTtaDDz6oAQMGyDAMd9cHAAAAwM1cGhMQERGhmpoaFRcXq7i4WCUlJTpx4oS7awMAAADQAlwKAdnZ2SouLtbcuXNVW1urP/7xjwoPD9fw4cM1f/58d9cItEp5pVXacuCI8suqvV0KAACAgwseGFxeXq7MzEy9++67ysjIYGAwLO9YTZ1mZ2QrK6fU3pYUH6HlqQkKCwnwYmUAAKAta841rkt3AtauXavZs2drwIABioqK0j333KOqqir97W9/0+7du10qGmgrZmdka1tumUPbttwyzcrY46WKAAAAHLk0MPjuu+9WUlKSZsyYoWuvvVb9+/d3d11Aq5RXWuVwB+AMm2kqK6dU+WXVigvv4IXKAAAA/sOlEHDkyBF31wG0CQeP1jS5vKCcEAAAALzP5XkCbDab1q1bp/3790uSrrjiCo0bN07+/v5uKw5obWK6hDS5PLYrAQAAAHifSyEgNzdXY8aM0eHDh9W3b19J0uLFixUdHa3169frkksucWuRQGvRO6KjkuIjtC23TLazxtz7G4ZG9AnnLgAAAPAJLg0Mnj17ti655BIdOnRIu3fv1u7du1VYWKi4uDjNnj3b3TUCrcry1ASN6BPu0DaiT7iWpyZ4qSIAAABHLj0itEOHDvr000/PGRD8xRdfaMSIEaqqqnJbgS2BR4TCE/LLqlVQXq3Yrh24AwAAAFpcc65xXeoOFBQUpOPHj5/TXlVVpcDAQFd2if9fXmmVDh6t4cKxDYgL5+8QAAD4JpdCwM0336wZM2Zo1apVGjp0qCRpx44duvvuu3XLLbe4tUCrYIIpAAAAeIpLYwKWLVumSy65RImJiQoODlZwcLCGDx+uPn366KmnnnJ3jZbABFMAAADwFJfuBHTq1EnvvvuucnNz9dVXX0n68RGhffr0cWtxVsEEUwAAAPAkl+cJWLVqlZYuXaqcnBxJUnx8vO6//37deeedbivOKphgCgAAAJ7kUgh45JFHtGTJEs2aNUuJiYmSpO3bt2vOnDkqLCzUokWL3FpkW8cEUwAAAPAklx4RGhERoWXLlik1NdWhPSMjQ7NmzVJZWVkjW/oGX3xE6ORVOxudYCp9+lAvVgYAAIDWoDnXuC4NDD516pSGDBlyTvvgwYN1+vRpV3ZpeUwwBQAAAE9x6U7ArFmzFBAQoCVLlji0P/DAAzpx4oRWrFjhtgJbgi/eCTiDCaYAAADgihafLEz6cWDwhx9+qJ/97GeSfpwnoLCwUJMnT1ZaWpp9vZ8GBTSNCaYAAADQ0lwKAfv27dNVV10lSfr2228lSeHh4QoPD9e+ffvs6xmG4YYSAQAAALiTSyFgy5Yt7q4DAAAAgIe4NDAYAAAAQOtFCAAAAAAshhAAAAAAWAwhAAAAALAYnwgBK1asUGxsrIKDgzVs2DDt3LmzyfWffPJJ9e3bV+3bt1d0dLTmzJmjkydPeqhaAAAAoHXzegh4/fXXlZaWpgULFmj37t0aOHCgRo0apSNHjjS4/j/+8Q/NnTtXCxYs0P79+7Vq1Sq9/vrr+uMf/+jhyltGXmmVthw4ovyyam+XAgAAgDbKpRmD3WnYsGG6+uqr9fTTT0uS6uvrFR0drVmzZmnu3LnnrH/vvfdq//792rx5s73tD3/4g3bs2KGPP/7Yqc/0xRmDj9XUaXZGtrJySu1tSfERWp6aoLCQAC9WBgAAgNagOde4Xr0TUFdXp127diklJcXe5ufnp5SUFG3fvr3BbYYPH65du3bZuwzl5eVpw4YNGjNmTKOfU1tbq8rKSoeXr5mdka1tuWUObdtyyzQrY4+XKgIAAEBb5dJkYe5SVlYmm82mqKgoh/aoqCh9/fXXDW4zadIklZWV6ZprrpFpmjp9+rTuvvvuJrsDLV68WAsXLnRr7e6UV1rlcAfgDJtpKiunVPll1YoL7+CFygAAANAWeX1MQHNlZmbq8ccf1zPPPKPdu3dr7dq1Wr9+vR577LFGt5k3b54qKirsr0OHDnmw4vM7eLSmyeUF5YwPAAAAgPt49U5AeHi4/P39VVJS4tBeUlKibt26NbjNww8/rNtvv1133nmnJKl///6qrq7WjBkzNH/+fPn5nZtrgoKCFBQU5P4v4CYxXUKaXB7blbsAAAAAcB+v3gkIDAzU4MGDHQb51tfXa/PmzUpMTGxwm5qamnMu9P39/SVJXh7j7LLeER2VFB8hf8NwaPc3DCXFR9AVCAB8FE90A9BaefVOgCSlpaVpypQpGjJkiIYOHaonn3xS1dXVuuOOOyRJkydPVs+ePbV48WJJ0tixY7VkyRIlJCRo2LBhys3N1cMPP6yxY8faw0BrtDw1QbMy9jiMDRjRJ1zLUxO8WBUAoCE80Q1Aa+f1EHDrrbeqtLRUjzzyiIqLizVo0CC9//779sHChYWFDv/y/9BDD8kwDD300EM6fPiwIiIiNHbsWP33f/+3t76CW4SFBCh9+lDll1WroLxasV07cAcAAHxUU090S58+1EtVAYDzvD5PgDf44jwBAIDWIa+0Stf9bWujy7c8kMw/4gDwilYzTwAAAK0NT3QD0BYQAgAAaAae6AagLSAE+BieNAEAvo0nugFoC7w+MBg/4kkTANB68EQ3AK0dA4N9ZGDw5FU7tS23TLaz/jr8DUMj+oTzpAkA8FE80Q2AL2nONS53AnxAXmmVw78mnWEzTWXllCq/rJr/uQCAD4oL5+IfQOvEmAAfwJMmAAAA4EmEAB9wvidNtPMzmlwOAAAANAchwAc09qSJM25ftVOTV+1URc0pD1cGAACAtogQ4COWpyZoRJ/wRpefmY4eAAAAuFCEAB8RFhKg9OlDlT6t4ScBnT1IGAAAALgQhAAfYzvPE1sZJAwAAIALRQjwMUxHDwAAgJZGCPAxTEcPAACAlkYI8EENDRJmOnoAAAC4CzMG+6Azg4SZjh4AAAAtgRDgw5iOHgAAAC2B7kAAAACAxRACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFgMIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFgMIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFgMIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFgMIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxfhECFixYoViY2MVHBysYcOGaefOnU2uf+zYMc2cOVPdu3dXUFCQLr30Um3YsMFD1QIAAACtWztvF/D6668rLS1NK1eu1LBhw/Tkk09q1KhROnDggCIjI89Zv66uTjfccIMiIyP11ltvqWfPnjp48KA6derk+eIBAACAVsgwTdP0ZgHDhg3T1VdfraefflqSVF9fr+joaM2aNUtz5849Z/2VK1fqiSee0Ndff62AgACXPrOyslJhYWGqqKhQaGjoBdUPAAAA+ILmXON6tTtQXV2ddu3apZSUFHubn5+fUlJStH379ga3ee+995SYmKiZM2cqKipK/fr10+OPPy6bzdbo59TW1qqystLhBQAAAFiVV0NAWVmZbDaboqKiHNqjoqJUXFzc4DZ5eXl66623ZLPZtGHDBj388MP629/+pj/96U+Nfs7ixYsVFhZmf0VHR7v1ewAAAACtiU8MDG6O+vp6RUZG6vnnn9fgwYN16623av78+Vq5cmWj28ybN08VFRX216FDhzxYMQAAAOBbvDowODw8XP7+/iopKXFoLykpUbdu3Rrcpnv37goICJC/v7+97fLLL1dxcbHq6uoUGBh4zjZBQUEKCgpyb/EAAABAK+XVOwGBgYEaPHiwNm/ebG+rr6/X5s2blZiY2OA2I0aMUG5ururr6+1t33zzjbp3795gAAAAAADgyOvdgdLS0vTCCy/o5Zdf1v79+3XPPfeourpad9xxhyRp8uTJmjdvnn39e+65R0ePHtV9992nb775RuvXr9fjjz+umTNneusrAAAAAK2K1+cJuPXWW1VaWqpHHnlExcXFGjRokN5//337YOHCwkL5+f0nq0RHR+uDDz7QnDlzNGDAAPXs2VP33XefHnzwQW99BQAAAKBV8fo8Ad7APAEAAABoa1rNPAEAAAAAPI8QAAAAAFgMIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFgMIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFhMO28XAEd5pVU6eLRGsV07KC68g7fLAQAAQBtECPARx2rqNDsjW1k5pfa2pPgILU9NUFhIgBcrAwAAQFtDdyAfMTsjW9tyyxzatuWWaVbGHi9VBAAAgLaKEOAD8kqrlJVTKptpOrTbTFNZOaXKL6v2UmUAAABoiwgBPuDg0ZomlxeUEwIAAADgPoQAHxDTJaTJ5bFdGSAMAAAA9yEE+IDeER2VFB8hf8NwaPc3DCXFR/CUIAAAALgVIcBHLE9N0Ig+4Q5tI/qEa3lqgpcqAgAAQFvFI0J9RFhIgNKnD1V+WbUKyquZJwAAAAAthhDgY+LCufgHAABAyyIEAADQQpgFHoCvIgQAAOBmzAIPwNcxMBgAADdjFngAvo4QALSQvNIqbTlwhBmfAYthFngArQHdgQA3oxsAYG3OzALP+AAA3sadAMDN6AYAWBuzwANoDQgBgBvRDQAAs8ADaA0IAYAbOdMNAEDbxyzwAHwdYwIAN6IbAACJWeAB+D5CAOBGZ7oBbMstc+gS5G8YGtEnnIsAwGKYBR6Ar6I7EOBmdAMAAAC+jjsBgJvRDQAAAPg6QgDQQugGAAAAfBXdgQAAAACLIQQAAAAAFkMIAAAAACyGEAAAAABYDCEAAAAAsBhCAAAAAGAxhAAAAADAYggBAAAAgMUQAgAAAACL8YkQsGLFCsXGxio4OFjDhg3Tzp07ndrutddek2EYGj9+fMsWCAAAALQhXg8Br7/+utLS0rRgwQLt3r1bAwcO1KhRo3TkyJEmtysoKNADDzygn//85x6qFAAAAGgbvB4ClixZorvuukt33HGHrrjiCq1cuVIhISF66aWXGt3GZrPptttu08KFC9W7d28PVgsAAAC0fl4NAXV1ddq1a5dSUlLsbX5+fkpJSdH27dsb3W7RokWKjIzU9OnTnfqc2tpaVVZWOrwAAAAAq/JqCCgrK5PNZlNUVJRDe1RUlIqLixvc5uOPP9aqVav0wgsvOP05ixcvVlhYmP0VHR19QXUDAAAArZnXuwM1x/Hjx3X77bfrhRdeUHh4uNPbzZs3TxUVFfbXoUOHWrBKAAAAwLe18+aHh4eHy9/fXyUlJQ7tJSUl6tat2znrf/vttyooKNDYsWPtbfX19ZKkdu3a6cCBA7rkkkvO2S4oKEhBQUFurh4AAABonbx6JyAwMFCDBw/W5s2b7W319fXavHmzEhMTz1n/sssu0969e5WdnW1/3XLLLRo5cqSys7Pp5gMAAAA4wat3AiQpLS1NU6ZM0ZAhQzR06FA9+eSTqq6u1h133CFJmjx5snr27KnFixcrODhY/fr1c9i+U6dOknROOwAAAICGeT0E3HrrrSotLdUjjzyi4uJiDRo0SO+//759sHBhYaH8/FrV0AUAAADApxmmaZreLsLTKisrFRYWpoqKCoWGhnq7HAAAAOCCNecal39iBwAAACyGEAAAAABYDCEAAAAAsBhCAAAAAGAxhAAAAADAYggBAAAAgMUQAgAAAACL8fpkYVaTV1qlg0drFNu1g+LCO3i7HAAAAFgQIcBDjtXUaXZGtrJySu1tSfERWp6aoLCQAC9WBgAAAKuhO5CHzM7I1rbcMoe2bbllmpWxx0sVAQAAwKoIAR6QV1qlrJxS2UzTod1mmsrKKVV+WbWXKgMAAIAVEQI84ODRmiaXF5QTAgAAAOA5hAAPiOkS0uTy2K4MEAYAAIDnEAI8oHdERyXFR8jfMBza/Q1DSfERPCUIAAAAHkUI8JDlqQka0SfcoW1En3AtT03wUkUAAACwKh4R6iFhIQFKnz5U+WXVKiivZp4AAAAAeA0hwMPiwrn4BwAAgHfRHQgAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAWQwgAAAAALIYQAAAAAFgMIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAW087bBXiDaZqSpMrKSi9XAgAAALjHmWvbM9e6TbFkCDh+/LgkKTo62suVAAAAAO51/PhxhYWFNbmOYToTFdqY+vp6ff/99zJNU7169dKhQ4cUGhrq7bLavMrKSkVHR3O8PYTj7Tkca8/ieHsWx9uzON6e1daOt2maOn78uHr06CE/v6Z7/VvyToCfn58uvvhi+y2T0NDQNvEX31pwvD2L4+05HGvP4nh7FsfbszjentWWjvf57gCcwcBgAAAAwGIIAQAAAIDFWDoEBAUFacGCBQoKCvJ2KZbA8fYsjrfncKw9i+PtWRxvz+J4e5aVj7clBwYDAAAAVmbpOwEAAACAFRECAAAAAIshBAAAAAAWQwgAAAAALKbNh4AVK1YoNjZWwcHBGjZsmHbu3Nnk+m+++aYuu+wyBQcHq3///tqwYYOHKm3dFi9erKuvvloXXXSRIiMjNX78eB04cKDJbdasWSPDMBxewcHBHqq4dXv00UfPOXaXXXZZk9twbrsuNjb2nONtGIZmzpzZ4Pqc287LysrS2LFj1aNHDxmGoXXr1jksN01TjzzyiLp376727dsrJSVFOTk5591vc3/7raKp433q1Ck9+OCD6t+/vzp06KAePXpo8uTJ+v7775vcpyu/R1ZxvvN76tSp5xy7G2+88bz75fxu2PmOd0O/44Zh6Iknnmh0n235/G7TIeD1119XWlqaFixYoN27d2vgwIEaNWqUjhw50uD6n3zyiVJTUzV9+nTt2bNH48eP1/jx47Vv3z4PV976bN26VTNnztSnn36qjRs36tSpU/rFL36h6urqJrcLDQ1VUVGR/XXw4EEPVdz6XXnllQ7H7uOPP250Xc7tC/PZZ585HOuNGzdKkiZMmNDoNpzbzqmurtbAgQO1YsWKBpf/5S9/0bJly7Ry5Urt2LFDHTp00KhRo3Ty5MlG99nc334raep419TUaPfu3Xr44Ye1e/durV27VgcOHNAtt9xy3v025/fISs53fkvSjTfe6HDsMjIymtwn53fjzne8zz7ORUVFeumll2QYhn796183ud82e36bbdjQoUPNmTNn2t/bbDazR48e5uLFixtcf+LEieZNN93k0DZs2DDzd7/7XYvW2RYdOXLElGRu3bq10XVWr15thoWFea6oNmTBggXmwIEDnV6fc9u97rvvPvOSSy4x6+vrG1zOue0aSeY777xjf19fX29269bNfOKJJ+xtx44dM4OCgsyMjIxG99Pc336r+unxbsjOnTtNSebBgwcbXae5v0dW1dDxnjJlijlu3Lhm7Yfz2znOnN/jxo0zr7vuuibXacvnd5u9E1BXV6ddu3YpJSXF3ubn56eUlBRt3769wW22b9/usL4kjRo1qtH10biKigpJUpcuXZpcr6qqSjExMYqOjta4ceP05ZdfeqK8NiEnJ0c9evRQ7969ddttt6mwsLDRdTm33aeurk6vvPKKpk2bJsMwGl2Pc/vC5efnq7i42OHcDQsL07Bhwxo9d1357UfjKioqZBiGOnXq1OR6zfk9gqPMzExFRkaqb9++uueee1ReXt7oupzf7lNSUqL169dr+vTp5123rZ7fbTYElJWVyWazKSoqyqE9KipKxcXFDW5TXFzcrPXRsPr6et1///0aMWKE+vXr1+h6ffv21UsvvaR3331Xr7zyiurr6zV8+HB99913Hqy2dRo2bJjWrFmj999/X88++6zy8/P185//XMePH29wfc5t91m3bp2OHTumqVOnNroO57Z7nDk/m3PuuvLbj4adPHlSDz74oFJTUxUaGtroes39PcJ/3HjjjUpPT9fmzZv15z//WVu3btXo0aNls9kaXJ/z231efvllXXTRRfrVr37V5Hpt+fxu5+0C0PbMnDlT+/btO2+fucTERCUmJtrfDx8+XJdffrmee+45PfbYYy1dZqs2evRo+58HDBigYcOGKSYmRm+88YZT/6oB161atUqjR49Wjx49Gl2Hcxut3alTpzRx4kSZpqlnn322yXX5PXLdb37zG/uf+/fvrwEDBuiSSy5RZmamrr/+ei9W1va99NJLuu2228770Ia2fH632TsB4eHh8vf3V0lJiUN7SUmJunXr1uA23bp1a9b6ONe9996rf/3rX9qyZYsuvvjiZm0bEBCghIQE5ebmtlB1bVenTp106aWXNnrsOLfd4+DBg9q0aZPuvPPOZm3Hue2aM+dnc85dV3774ehMADh48KA2btzY5F2Ahpzv9wiN6927t8LDwxs9dpzf7vF///d/OnDgQLN/y6W2dX632RAQGBiowYMHa/Pmzfa2+vp6bd682eFf6M6WmJjosL4kbdy4sdH18R+maeree+/VO++8o48++khxcXHN3ofNZtPevXvVvXv3FqiwbauqqtK3337b6LHj3HaP1atXKzIyUjfddFOztuPcdk1cXJy6devmcO5WVlZqx44djZ67rvz24z/OBICcnBxt2rRJXbt2bfY+zvd7hMZ99913Ki8vb/TYcX67x6pVqzR48GANHDiw2du2qfPb2yOTW9Jrr71mBgUFmWvWrDG/+uorc8aMGWanTp3M4uJi0zRN8/bbbzfnzp1rX3/btm1mu3btzL/+9a/m/v37zQULFpgBAQHm3r17vfUVWo177rnHDAsLMzMzM82ioiL7q6amxr7OT4/3woULzQ8++MD89ttvzV27dpm/+c1vzODgYPPLL7/0xldoVf7whz+YmZmZZn5+vrlt2zYzJSXFDA8PN48cOWKaJud2S7DZbGavXr3MBx988JxlnNuuO378uLlnzx5zz549piRzyZIl5p49e+xPo/mf//kfs1OnTua7775r/vvf/zbHjRtnxsXFmSdOnLDv47rrrjOXL19uf3++334ra+p419XVmbfccot58cUXm9nZ2Q6/5bW1tfZ9/PR4n+/3yMqaOt7Hjx83H3jgAXP79u1mfn6+uWnTJvOqq64y4+PjzZMnT9r3wfntvPP9npimaVZUVJghISHms88+2+A+rHR+t+kQYJqmuXz5crNXr15mYGCgOXToUPPTTz+1L7v22mvNKVOmOKz/xhtvmJdeeqkZGBhoXnnlleb69es9XHHrJKnB1+rVq+3r/PR433///fa/m6ioKHPMmDHm7t27PV98K3Trrbea3bt3NwMDA82ePXuat956q5mbm2tfzrntfh988IEpyTxw4MA5yzi3Xbdly5YGfzvOHM/6+nrz4YcfNqOiosygoCDz+uuvP+fvICYmxlywYIFDW1O//VbW1PHOz89v9Ld8y5Yt9n389Hif7/fIypo63jU1NeYvfvELMyIiwgwICDBjYmLMu+6665yLec5v553v98Q0TfO5554z27dvbx47dqzBfVjp/DZM0zRb9FYDAAAAAJ/SZscEAAAAAGgYIQAAAACwGEIAAAAAYDGEAAAAAMBiCAEAAACAxRACAAAAAIshBAAAAAAWQwgAAFyQ5ORk3X///U2uExsbqyeffNL+3jAMrVu3TpJUUFAgwzCUnZ3dYjU2xpnaf+rs2gGgtSIEAAAknXuh7k6fffaZZsyY0eCy6OhoFRUVqV+/fpKkzMxMGYahY8eOtUgtZ1u7dq0ee+wxt+7Tk/UDgKvaebsAAEDbFxER0egyf39/devWzYPVSHV1dQoMDFSXLl08+rkA4Cu4EwAALSw5OVn33nuv7r33XoWFhSk8PFwPP/ywTNOUJP3www+aPHmyOnfurJCQEI0ePVo5OTmSJNM0FRERobfeesu+v0GDBql79+729x9//LGCgoJUU1PTZB2maerRRx9Vr169FBQUpB49emj27Nn2Gg8ePKg5c+bIMAwZhiFJKi8vV2pqqnr27KmQkBD1799fGRkZ5+z79OnTjX4/qem7DGd3ByooKNDIkSMlSZ07d5ZhGJo6darS09PVtWtX1dbWOmw7fvx43X777U1+b0l69NFHNWjQIL344ouKi4tTcHCw/Xuf3R2oqKhIN910k9q3b6+4uDj94x//aLD2srIy/fKXv1RISIji4+P13nvv2b9LQ/UDgK8hBACAB7z88stq166ddu7cqaeeekpLlizRiy++KEmaOnWqPv/8c7333nvavn27TNPUmDFjdOrUKRmGoaSkJGVmZkr6MTDs379fJ06c0Ndffy1J2rp1q66++mqFhIQ0WcPbb7+tpUuX6rnnnlNOTo7WrVun/v37S/qxW8zFF1+sRYsWqaioSEVFRZKkkydPavDgwVq/fr327dunGTNm6Pbbb9fOnTud/n7NER0drbfffluSdODAARUVFempp57ShAkTZLPZ7BfbknTkyBGtX79e06ZNc2rfubm5evvtt7V27dpGxx9MnjxZ33//vTIzM/X222/r+eef15EjR85Zb+HChZo4caL+/e9/a8yYMbrtttt09OjRRusHAF9DdyAA8IDo6GgtXbpUhmGob9++2rt3r5YuXark5GS999572rZtm4YPHy5JevXVVxUdHa1169ZpwoQJSk5O1nPPPSdJysrKUkJCgrp166bMzExddtllyszM1LXXXnveGgoLC9WtWzelpKQoICBAvXr10tChQyVJXbp0kb+/vy666CKHrjk9e/bUAw88YH8/a9YsffDBB3rjjTfs2zb1/e66665mHSd/f397F53IyEh16tTJvmzSpElavXq1JkyYIEl65ZVX1KtXLyUnJzu177q6OqWnpzfaNenrr7/Wpk2b9Nlnn2nIkCGSpBdffFHx8fHnrDt16lSlpqZKkh5//HEtW7ZMO3fu1I033tho/QDgS7gTAAAe8LOf/czexUaSEhMTlZOTo6+++krt2rXTsGHD7Mu6du2qvn37av/+/ZKka6+9Vl999ZVKS0u1detWJScnKzk5WZmZmTp16pQ++eQTpy6EJ0yYoBMnTqh3796666679M477+j06dNNbmOz2fTYY4+pf//+6tKlizp27KgPPvhAhYWFTn0/m83mzOFxyl133aUPP/xQhw8fliStWbNGU6dOdfjcpsTExDQ5NuHAgQNq166drrrqKntbnz591Llz53PWHTBggP3PHTp0UGhoaIN3DADAVxECAMDHnbkA37p1q0MI2Lp1qz777DOdOnXKfhehKdHR0Tpw4ICeeeYZtW/fXr///e+VlJSkU6dONbrNE088oaeeekoPPvigtmzZouzsbI0aNUp1dXXu/IpOSUhI0MCBA5Wenq5du3bpyy+/bFZ/+w4dOritloCAAIf3hmGovr7ebfsHgJZGCAAAD9ixY4fD+08//VTx8fG64oordPr0aYfl5eXlOnDggK644gpJP15g/vznP9e7776rL7/8Utdcc40GDBig2tpaPffccxoyZIjTF7jt27fX2LFjtWzZMmVmZmr79u3au3evJCkwMPCcf7nftm2bxo0bp9/+9rcaOHCgevfurW+++cbp7+fv7+9UXWcLDAyUpAbvItx5551as2aNVq9erZSUFEVHRzd7/43p27evTp8+rT179tjbcnNz9cMPPzRrP03VDwC+ghAAAB5QWFiotLQ0HThwQBkZGVq+fLnuu+8+xcfHa9y4cbrrrrv08ccf64svvtBvf/tb9ezZU+PGjbNvn5ycrIyMDA0aNEgdO3aUn5+fkpKS9Oqrrzo1HkD6sfvMqlWrtG/fPuXl5emVV15R+/btFRMTI+nHJ/hkZWXp8OHDKisrkyTFx8dr48aN+uSTT7R//3797ne/U0lJidPfzxUxMTEyDEP/+te/VFpaqqqqKvuySZMm6bvvvtMLL7zg9IBgZ1122WVKSUnRjBkztHPnTu3Zs0czZsxQ+/btne5ydL76AcBXEAIAwAMmT56sEydOaOjQoZo5c6buu+8+++RZq1ev1uDBg3XzzTcrMTFRpmlqw4YNDl1Orr32WtlsNoe+/8nJyee0NaVTp0564YUXNGLECA0YMECbNm3SP//5T3Xt2lWStGjRIhUUFOiSSy6x951/6KGHdNVVV2nUqFFKTk5Wt27dNH78+GZ9v+bq2bOnFi5cqLlz5yoqKkr33nuvfVlYWJh+/etfq2PHjg3WcaHS09MVFRWlpKQk/fKXv9Rdd92liy66yP5I0QutHwB8hWGe/SBnAIDbJScna9CgQS02G6/VXH/99bryyiu1bNmyFv+s7777TtHR0dq0aZOuv/76Fv88APAUHhEKAGgVfvjhB2VmZiozM1PPPPNMi3zGRx99pKqqKvXv319FRUX6r//6L8XGxiopKalFPg8AvIXuQADQRrz66qvq2LFjg68rr7zS2+VdsISEBE2dOlV//vOf1bdvX4dlV155ZaPf/dVXX3X6M06dOqU//vGPuvLKK/XLX/5SERERyszMPOdpQADQ2tEdCADaiOPHjzc4aFf68ZGWZwYAt0UHDx5s9FGnUVFRuuiiizxcEQD4NkIAAAAAYDF0BwIAAAAshhAAAAAAWAwhAAAAALAYQgAAAABgMYQAAAAAwGIIAQAAAIDFEAIAAAAAiyEEAAAAABbz/wEqDTdPV6aB+AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 900x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result[(result['total_cnt_left'] > 5) & (result['retention_left'] < 1)].plot.scatter(x='pow_stability_right', y='pow_stability_left', figsize=(9, 6))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "fsrs4anki",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
